<<<предыдущая глава к содержанию следующая глава >>>

3. Режим программирования

Для перехода в режим программирования в окне управления выбираем пункт File и входим в редактор MatLab'а: New (создать новый М-файл) или Open(открыть существующий файл с расширением .m). В дальнейшем может производиться обычный набор текста программы или его корректура и действия в соответствии с меню (сохранение под текущим или другим именем, запуск на исполнение в обычном и отладочном режимах и др.).

Различают два вида М-файлов: М-сценарии и М-функции.

М-сценарий - это файл, содержащий последовательность команд и комментариев (строк, начинающихся символом %) и пользующийся данными из рабочей области. Заголовок его начинается командой script или может отсутствовать.

Для М-функции допускаются входные и выходные аргументы, локализация внутренних ее переменных и возможность обращения к ней из других программ. М-функции включаются в библиотеку функций системы в виде текстовых файлов.

Заголовок М-функции имеет вид:

function [<список выходных переменных>]= 
         <имя функции> (<список входных переменных>)
например, функция вычисления факториала положительного числа и его обратной величины может быть описана файлом fact.m:
	function [f,g]=fact(n) % факториал и обратная величина
	f=prod (1:n);
	g=1/f;

Кроме использованных выше операторов присваивания, программирование в MatLab'е допускает и ряд других традиционных для прогрммных сред операторов.

Условный оператор выступает в одной из следующих форм:

if <условие>  if <условие> 	if <условие>   
  <команды>     <команды>	 <команды>
end	 	  else  		elseif <условие>  
		     <команды>     <команды>   
		  end			else
					  <команды>     						
					end

В роли условия может использоваться любое логическое выражение, построенное на основе операций отношения и логических. Если значение этого выражения является массивом, то условие считается ис-тинным, если все его элементы истинны (истина - 1, ложь - 0).

Оператор цикла с заданным числом повторений, в основном используемый в форме:

for V=A :H:B                for V=A:B
   <команды>                   <команды>
end                                 end

(V -переменная/параметр цикла, A,B - начальное и конечные значения; H - приращение, по умолчанию 1). Допускаются и вложенные циклы, например:

for i=1:n			for i=1:n-1                   
 for j=1:m		 	 for k=i+1:n  
  a(i,j)=x(i)^j;		   if a(i) < a(k) 
 end					m=a(i) 
end					a(i)=a(k)
	 				a(k)=m
				   end	
				  end	
			      end                     

В заголовке цикла можно использовать одномерный массив. Так цикл

k=1;
for i=[0 5 7]
  x(k)=2^i;
  k=k+1;
  end
формирует массив Х=[1 32 128].

Оператор цикла с предусловием имеет традиционную конструкцию:

		while <условие> 
			<команды>                   
		end  
и обеспечивает выполнение команд тела цикла, пока истинно проверяемое условие. Заметим, что работа цикла может быть прервана (выход из внутреннего цикла) оператором break:
			while a<1
				n=n+1
				if n>250
  				  	break
			end ...

Оператор переключения обобщает условный оператор на случай более двух условий и имеет конструкцию:

switch  <выражение>
	case <значение 1>
		<команды>
	case <значение 2>				
		<команды>
		. . . . .	
	otherwise		% может отсутствовать
		<команды>
	end

Контрольные значения проверяются на равенство и могут задаваться и списком:

		swith k	 
			case 0
				t=1
			case (1, 2,5)
				t=2
			otherwise
				t=0
		end

Выход из функции в вызывающую программу обеспечивается выполнением последнего ее оператора или командой return.

Кроме упомянутых основных операторов, традиционных для любой системы программирования, остановимся на ряде операторов обеспечения пользовательского интерфейса.

Ввод с клавиатуры реализуется командой вида

<переменная>= input ('подсказка')

Например,

" x=input(' степень полинома ');
степень полинома 3

Приостановка выполнения программы может быть предусмотрена включением в текст команды pause (приостановка до нажатия любой клавиши), pause (n) (приостановка на n сек), keyboard (приостановка с возможностью выполнять практически любые ко-манды и последующим возвратом в программу командой return ).

Можно построить выбор варианта с клавиатуры созданием меню:

<переменная>=menu ('заголовок','выбор1','выбор2',...)

Например, команда:
k=menu('Использовать метод','Гаусса','Краута','простой итерации') создаст на экране всплывающее меню с указанными пунктами-клавишами и щелчок по клавише задаст значение переменной k, рав-ное 1, 2 или 3.

Мы не останавливаемся на многообразии операторов, связанных с выводом на экран (вывод значения disp, форматированный вывод fprint), отладкой и сигнализацией об ошибках, анализом списка аргументов и др.

Приведем несколько простейших примеров использования программного режима.

Пример 1. Анализ скорости убывания элементов числовой последовательности

числовая последовательность

до значений, меньших 0.0001)

Чтобы с легкостью отыскивать значения элементов последовательности, опишем функцию (файл y.m):

		function f=y(n)                   
			if mod(n,2)==0
				f=-1;
			else 
				f=1;
			end 
			f=f/n^n;
		end 
и сценарий (файл limit1.m):
n=1 ;
while abs(y(n))>1e-4
	n=n+1 ;
end
disp('Число элементов последовательности равно') 
k=n
for x=1:k
	Y(x)=y(x);
end
disp('Значения элементов последовательности')
	Y 
plot(1:k,Y, 'r-*') %Линия -сплошная(-)красная ®, маркеры(*)
график функции Теперь можно в командной строке набрать вызов limit1, получая на экране число элементов последовательности k, значения элементов последовательности Y (n=1ёk) и "график" функции:
Число элементов последовательности равно
k =6
Значения элементов последовательности
Y = 1.0000 -0.2500 0.0370 -0.0039 0.0003 -0.0000

Пример 2. Поиск оценки суммы ряда.

ряд

с точностью 10-6.

	Файл limit2.m  (сценарий):
		y=1;
		s=y;
		m=1;
		while abs(y)>1e-6
			y=-y*(2*m-1)/(2*m+1).^2;
			s=s+y;
			m=m+1 ;
		 end
		disp('Число слагаемых' )
		disp(	m-1)
		disp('Оценка суммы')
		disp(s)

В командной строке набираем limit2 , получая на экране число элементов отрезка суммы, превышающих 10-6 и саму оценку суммы:
Число слагаемых 6
Оценка суммы 0.90097107966794


<<<предыдущая глава к содержанию следующая глава >>>